专题三:机器学习基础

您所在的位置:网站首页 python k-means聚类 专题三:机器学习基础

专题三:机器学习基础

2023-04-13 02:52| 来源: 网络整理| 查看: 265

K-means聚类算法 原理及算法流程

K-means算法是一种常用的基于距离的聚类算法。其基本思想是将样本数据划分为K个类别,使得每个数据点与其所属类别的聚类中心之间的距离最小化,从而达到聚类的目的。具体流程如下:

随机选择K个点作为初始聚类中心。计算每个数据点与K个聚类中心的距离,并将其归到距离最近的聚类中心的类别中。更新聚类中心的位置,将每个聚类中心的位置移动到其类别中所有点的均值位置。重复第2和第3步,直到聚类中心不再改变或达到最大迭代次数。K-means算法的优化

K-means算法有以下几个优化方法:

随机初始点的选择:可以通过多次随机初始化,选择最小化目标函数的初始化点。聚类中心的数量选择:可以通过肘部法则或轮廓系数等方法确定聚类中心的数量。迭代停止的条件:可以通过设置最大迭代次数或设置聚类中心的变化阈值等方法来决定停止迭代。K-means算法的评估指标

K-means算法的常用评估指标包括:

SSE(Sum of Squared Errors):所有样本点到其所属聚类中心的距离的平方和。Silhouette系数:计算样本点的聚类效果,取值范围在[-1, 1]之间,值越大表示聚类效果越好。层次聚类算法原理及算法流程

层次聚类算法又被称为分级聚类算法,其基本思想是将样本分为不同的类别,并将类别进行分层次展示。该算法分为两种,一种是自下而上的聚合算法,另一种是自上而下的分裂算法。这里介绍一下自下而上的聚合算法。

层次聚类算法的基本流程如下:

将每个样本作为一个初始簇计算两个最相似簇之间的相似度将最相似的两个簇合并成一个新的簇重复步骤2和步骤3,直到所有样本都被合并到一个簇中层次聚类算法的优化

层次聚类算法的优化主要体现在两个方面:

相似度度量方法的优化:选择合适的相似度度量方法可以提高聚类算法的准确性,通常采用欧氏距离或余弦相似度进行计算。层次聚类的策略优化:在层次聚类算法中,最重要的就是合并簇的策略。常见的策略包括单连通性、完全连通性、平均连通性等,具体选择哪种策略需要根据实际问题和数据特征进行考虑。层次聚类算法的评估指标

层次聚类算法的评估指标包括聚类效果和聚类质量两个方面。

聚类效果主要指聚类结果的可视化呈现,通过对聚类结果进行观察和分析,判断聚类结果是否符合实际情况。

聚类质量主要指聚类算法的准确性和稳定性,常用的评价指标包括轮廓系数、Calinski-Harabasz指数、Davies-Bouldin指数等。

密度聚类算法

密度聚类算法是一种基于样本之间的密度来划分簇的聚类算法。相比于K-means和层次聚类算法,它对簇的形状、大小没有先验假设,并且可以发现任意形状的簇。常见的密度聚类算法有DBSCAN和OPTICS算法。

DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)算法是一种基于密度的聚类算法,它将一定密度范围内的样本分为同一簇,同时还可以识别出噪声点。

DBSCAN算法主要需要设置两个参数,一个是密度半径(eps),表示在这个半径范围内的样本都属于同一簇;另一个是最小样本数(min_samples),表示一个簇中最少要有多少个样本。DBSCAN算法的基本流程如下:

随机选择一个未被访问的点p搜索p的ε-邻域,如果p的ε-邻域内的点的个数小于min_samples,那么将p标记为噪声点。否则将p作为第一个簇的种子点,并标记为已访问。以p为中心,继续搜索p的ε-邻域内的点,将这些点加入到第一个簇中,标记为已访问。对于第一个簇中的所有点,依次执行步骤2、3,直到第一个簇无法再添加新的点为止。选择一个未被访问的点q,重复步骤2~4,直到所有的点都被访问过。

DBSCAN算法的优点是可以发现任意形状的簇,并且可以识别出噪声点。但它的缺点是对参数的设置比较敏感,不同的参数设置会导致不同的聚类结果。

下面是使用sklearn库实现DBSCAN算法的代码:

from sklearn.cluster import DBSCAN from sklearn.datasets import make_blobs # 生成模拟数据 X, y = make_blobs(n_samples=1000, centers=4, random_state=42) # 构建模型 dbscan = DBSCAN(eps=0.5, min_samples=5) # 模型拟合 dbscan.fit(X) # 获取预测结果 labels = dbscan.labels_ # 输出聚类结果和噪声点个数 n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) n_noise_ = list(labels).count(-1) print('Estimated number of clusters: %d' % n_clusters_) print('Estimated number of noise points: %d' % n_noise_) OPTICS算法

OPTICS(Ordering Points To Identify the Clustering Structure)算法是一种基于密度的聚类算法,它可以发现任意形状的聚类,并且不需要预先指定聚类个数。与DBSCAN算法类似,OPTICS算法同样可以识别噪声点和离群点。不同之处在于,OPTICS算法不需要指定半径参数,而是通过建立基于密度可达的点序来发现聚类结构。

OPTICS算法的核心思想是通过定义可达距离(reachability distance)来度量两个样本之间的距离,而不是简单的欧式距离或曼哈顿距离等。对于样本$i$和样本$j$,可达距离reachability_distancei,j的计算方法为:

reachability_distancei,j​=max{core_distancej​,dist(i,j)}

其中,core_distance j ​是样本$j$的核心距离,即样本$j$在以样本$j$为中心,半径为$\epsilon$的超球体内包含的样本数量达到了某个设定的阈值,而dist(i,j)是欧式距离。

对于样本$i$,其邻域$\epsilon$范围内的点集合为N ,而以样本$i$为核心的密度可达距离reachability_distance i​为:

OPTICS算法的主要步骤如下:

对数据集中的每个样本点,计算其与其他样本点的可达距离,并按照可达距离的大小进行排序。以任意一个样本点开始,从小到大遍历已排序的样本点列表。对于每个点p,计算其与已处理的点$q$之间的核心距离core_distance_p,并计算p的可达距离reachability_distance_p。在处理完所有样本点后,根据可达距离$reachability_distance$将样本点组织成一个可视化的图形结构,从而得到聚类结果。

下面给出使用Python实现OPTICS算法的示例代码:

from sklearn.cluster import OPTICS from sklearn.datasets import make_blobs # 创建一个模拟数据集 X, y = make_blobs(n_samples=1000, centers=5, random_state=42) # 初始化OPTICS聚类器 optics = OPTICS() # 对数据进行聚类 optics.fit(X) # 打印出每个样本的聚类标签 print(optics.labels_)

在这个示例中,我们使用Scikit-learn库中的OPTICS聚类器对一个模拟数据集进行聚类。首先,我们使用make_blobs函数生成一个包含1000个样本和5个聚类中心的数据集。然后,我们初始化OPTICS聚类器并对数据进行聚类。最后,我们打印出每个样本的聚类标签。

请注意,这里的聚类标签与K-means和层次聚类算法不同,它是一组整数,其中-1表示离群点。因为OPTICS算法不需要事先指定聚类数量,所以聚类标签的数量取决于数据集的复杂性和噪声水平。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3